import asyncio
import edge_tts
import os
from datetime import datetime

async def test_tts(text, voice="zh-CN-XiaoxiaoNeural", output_file=None):
    """
    测试文字转语音功能
    :param text: 要转换的文字
    :param voice: 语音模型，默认为中文女声
    :param output_file: 输出文件路径，如果为None则自动生成
    :return: 生成的音频文件路径
    """
    try:
        # 如果没有指定输出文件，则自动生成
        if output_file is None:
            # 创建output目录
            os.makedirs("output", exist_ok=True)
            # 生成文件名
            timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
            output_file = f"output/test_tts_{timestamp}.mp3"

        print(f"开始生成语音...")
        print(f"文字内容: {text}")
        print(f"使用语音模型: {voice}")
        print(f"输出文件: {output_file}")

        # 创建Communicate对象
        communicate = edge_tts.Communicate(text, voice)
        
        # 保存音频文件
        await communicate.save(output_file)
        
        print("语音生成成功！")
        return output_file

    except Exception as e:
        print(f"生成语音失败: {str(e)}")
        return None

def main():
    # 测试文字
    test_text = "你好，这是一个测试。Hello, this is a test. こんにちは、これはテストです。"
    
    # 可用的语音模型列表
    voices = [
        "zh-CN-XiaoxiaoNeural",  # 中文女声
        "zh-CN-YunxiNeural",     # 中文男声
        "en-US-JennyNeural",     # 英文女声
        "en-US-GuyNeural",       # 英文男声
        "ja-JP-NanamiNeural",    # 日文女声
    ]
    
    # 测试所有语音模型
    for voice in voices:
        print(f"\n测试语音模型: {voice}")
        output_file = asyncio.run(test_tts(test_text, voice))
        if output_file:
            print(f"生成的音频文件: {output_file}")
            print(f"文件大小: {os.path.getsize(output_file)} 字节")

if __name__ == "__main__":
    main()
